#include<stdio.h>
int main1()
{   int a=10;
    int *p;
   p=&a;
    printf("%ld\n",sizeof(p));
     printf("%p\n",p);//%p打印p中存档的地址，16进制的值
p=100;
printf("%d\n",*p);
    return 0;
}
/*在64位操作系统中，指针变量的地址线为8个字节
    32位操作系统中，指针变量位四个字节
    地址线为操作系统中最大寻址范围*/
    /*   * 为取值符号，取指针中存的地址中的内存值 */
    /*可以通过*p修改指向的变量的值，*/
    /*段错误，访问非法地址，导致内寸错误
    存有非法地址的指针我们叫做野指针
    注意点；当指针不在使用时我们置空
     p=NULL；
     初始化时我们   int *p=NULL；*/
     int main2()
     {
        int a=10;
        int *p=&a;
        int *p1=NULL;

        printf("%d\n",**p2);


     }
     //const 常量关键字
     int main3()
     {
        int a=10;
        int b=20;
        const int *p1=&a;//常量指针：指针指向一个常量；
        //指向的内存的值不允许修改，朝向的值不能改
        int * const p2=&b;//指针常量；不能修改内存中的地址，不能改朝向


     }
     int * fun()
     {
        static  int a=10;//静态关键字，修饰的变量会放在静态全局区中；
        return &a;    //静态全局区是到程序结束才全部释放
                   //静态变量只会初始化一次，延长生命周期
     }
//全局变量不被任何函数包含，能被所有函数调用。访问，
//局部变量优先级高于全局变量；》》》名字遮蔽

int(*p) abb()//定义一个函数指针
{
    return  
}
/*
int caculate(int a,int b,char c)
{
    
    switch(c)
    {
      case'+':return (a,b);
      case'-':return(a,b);
      case'*':return(a,b);
      case'/':return(a,b);
      default:
      return -1;
     } 
}
*/
//回调函数（callback），将函数指针传给拎一个函数作为参数
int caculate(int a,int ,b ,int(*funcPtr)(int,int))
{
   return funcPtr(a,b);
}

int multiply(int a,int b)
{
    return a*b;
}
int divide (int a,int b)
{
    return a/b;
}
int 

int main()
{ 
   int a;
   int b;
   int (*p)(int,int)= add;
   int c=p(1,2);
   printf("%d\n",);
   return 0;

}




//函数指针：指向函数的指针；
//指向的是内存
//开闭原则：是一种设计原则，尽量不要修改原有的代码，要对代码功能进行扩展；
//